home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 July / EnigmA AMIGA RUN 09 (1996)(G.R. Edizioni)(IT)[!][issue 1996-07 & 08][EARSAN CD VIII].iso / earcd / dev1 / energy.lha / Energy / C2E / makevisible.e < prev    next >
Text File  |  1996-05-18  |  5KB  |  158 lines

  1. /*
  2.  * makevisible.e - mostra la caratteristica di SPOS_MAKEVISIBLE
  3.  *
  4.  *  Marco Talamelli 22-10-1995
  5.  *
  6.  * Apre uno schermo sovradimensionato autoscroll.  Usa il mouse per disegnare
  7.  * un rettangolo sullo schermo.  Allora, usare il mouse per scrollare lo schermo
  8.  * ovunque ti piace.  Premere qualsiasi key per muovere il rettangolo disegnato
  9.  * in vista usando ScreenPosition( sc, SPOS_MAKEVISIBLE, ... ).
  10.  *
  11.  * La caratteristica di SPOS_MAKEVISIBLE può essere utile per assicurare che
  12.  * certe aree sono visibili, per esempio il cursore di un Word-Processor.
  13.  *
  14.  * Premi "Q" o <Esc> per uscire.
  15.  *
  16.  */
  17.  
  18. OPT PREPROCESS
  19.  
  20. MODULE     'intuition/intuition',  -> Intuition data structures and tags
  21.            'intuition/screens',    -> Screen data structures and tags
  22.            'graphics/modeid',      -> Release 2 Amiga display mode ID's
  23.            'exec/memory',          -> Memory flags
  24.            'graphics/gfx',         -> Bitmap and other structures
  25.            'graphics/rastport',    -> RastPort and other structures
  26.            'graphics/view',        -> ViewPort and other structures
  27.     'intuition/iobsolete',
  28.     'graphics/gfxmacros',
  29.     'exec/ports'
  30.  
  31. ENUM ERR_NONE, ERR_SCRN, ERR_WIN, AREAOUTLINE = 8
  32.  
  33. RAISE ERR_SCRN   IF OpenScreenTagList()=NIL,
  34.       ERR_WIN    IF OpenWindowTagList()=NIL
  35.  
  36. PROC main() HANDLE
  37.  
  38.   DEF     win=NIL:PTR TO window,
  39.     finito = TRUE,
  40.     dragging = FALSE,
  41.     scr=NIL:PTR TO screen,
  42.     disegna:rectangle,
  43.     trascina:rectangle,
  44.     imsg:PTR TO intuimessage,
  45.     class,code
  46.  
  47.   -> E-Nota: E apre automaticamente le librerie Intuition e Graphics
  48.  
  49.   scr:=OpenScreenTagList(NIL,
  50.                         [SA_DISPLAYID,  LORES_KEY,
  51.             SA_OVERSCAN, OSCAN_TEXT,
  52.                     /*  Altri tags possono andare qui: */
  53.             SA_WIDTH, 900,
  54.             SA_HEIGHT, 600,
  55.             SA_DEPTH, 2,
  56.             SA_AUTOSCROLL, 1,
  57.             SA_PENS,[0,1,1,2,1,3,2,0,2,1,2,1,-1]:INT,
  58.             SA_TITLE, 'Disegna un rettangolo con il mouse. Scrolla lo schermo. Premi un key per riportarlo in vista. <Esc> per uscire.',
  59.                          NIL])
  60.   win:=OpenWindowTagList(NIL,
  61.                         [WA_BORDERLESS, TRUE,
  62.             WA_BACKDROP, TRUE,
  63.             WA_IDCMP, MOUSEBUTTONS OR VANILLAKEY,
  64.             WA_NOCAREREFRESH, TRUE,
  65.             WA_ACTIVATE, TRUE,
  66.             WA_SMARTREFRESH, TRUE,
  67.             WA_CUSTOMSCREEN, scr,
  68.                                  NIL])
  69.  
  70.     disegna.minx := 20
  71.     disegna.miny := 20
  72.     disegna.maxx := 150
  73.     disegna.maxy := 100
  74.  
  75.     SetABPenDrMd( win.rport, 3, 0, RP_COMPLEMENT )
  76.     SetOPen(win.rport,1)
  77.     RectFill( win.rport, disegna.minx, disegna.miny,
  78.     disegna.maxx, disegna.maxy )
  79.  
  80.     WHILE finito
  81.  
  82.     Wait( Shl(1,win.userport.sigbit))
  83.     WHILE  imsg := GetMsg( win.userport )
  84.  
  85.     class:=imsg.class
  86.     code:=imsg.code
  87.         SELECT class
  88.  
  89.         CASE VANILLAKEY
  90.             SELECT code
  91.                 CASE "Q";    finito := FALSE
  92.                 CASE "q";    finito := FALSE
  93.                 CASE 27;    finito := FALSE
  94.             DEFAULT
  95. ScreenPosition( scr, SPOS_MAKEVISIBLE,disegna.minx, disegna.miny,disegna.maxx, disegna.maxy )
  96.             ENDSELECT
  97.  
  98.         CASE MOUSEBUTTONS
  99.  
  100.             IF ( imsg.mousex < 0 ) THEN imsg.mousex := 0
  101.             IF ( imsg.mousex >= scr.width ) THEN imsg.mousex := scr.width - 1
  102.             IF ( imsg.mousey < 0 ) THEN imsg.mousey := 0
  103.             IF ( imsg.mousey >= scr.height ) THEN imsg.mousey := scr.height - 1
  104.  
  105.             IF ( code = SELECTDOWN )
  106.             dragging := TRUE
  107.             trascina.minx := imsg.mousex
  108.             trascina.miny := imsg.mousey
  109.  
  110.             ELSEIF (( code = SELECTUP ) AND ( dragging ))
  111.  
  112.             dragging := FALSE
  113.             IF ( imsg.mousex > trascina.minx )
  114.                 trascina.maxx := imsg.mousex
  115.             ELSE
  116.  
  117.                 trascina.maxx := trascina.minx
  118.                 trascina.minx := imsg.mousex
  119.             ENDIF
  120.             IF ( imsg.mousey > trascina.miny )
  121.  
  122.                 trascina.maxy := imsg.mousey
  123.  
  124.             ELSE
  125.                 trascina.maxy := trascina.miny
  126.                 trascina.miny := imsg.mousey
  127.             ENDIF
  128.             SetOPen( win.rport, 0 )
  129.             RectFill( win.rport, disegna.minx, disegna.miny,
  130.                 disegna.maxx, disegna.maxy )
  131.  
  132.                 disegna.minx := trascina.minx
  133.                 disegna.miny := trascina.miny
  134.                 disegna.maxx := trascina.maxx
  135.                 disegna.maxy := trascina.maxy
  136.  
  137.             SetOPen( win.rport, 1 )
  138.             RectFill( win.rport, disegna.minx, disegna.miny,
  139.                 disegna.maxx, disegna.maxy )
  140.             ENDIF
  141.  
  142.         ENDSELECT
  143.         ReplyMsg( imsg )
  144.     ENDWHILE
  145.     ENDWHILE
  146.  
  147. EXCEPT DO
  148.   IF win THEN CloseWindow(win)
  149.   IF scr THEN CloseScreen(scr)
  150.     SELECT exception
  151.       CASE ERR_SCRN;   request('Errore: Fallito nel aprire lo schermo personale\n','Uscita',NIL)
  152.       CASE ERR_WIN;    request('Errore: Fallito nel aprire la finestra\n','Uscita',NIL)
  153.     ENDSELECT
  154. ENDPROC
  155.  
  156. PROC request(corpo,gadget,argomenti)
  157. ENDPROC EasyRequestArgs(0,[20,0,0,corpo,gadget],0,argomenti)
  158.